/*实现一个按字节来截取字符串的子串的方法,功能类似于String类的substring()方法,String类是按字符截取的,
例如"中国abc".subString(1,3),将返回"国a",这里要求按字节截取,一个英文字符当一个字节,一个中文字符当两
个字节.
 */
import java.io.UnsupportedEncodingException;
public class Number4{
	public static void main(String[] args) {
		byteSubStr("hello北京欢迎你",9);

		
	}
	public static void byteSubStr(String str , int len)
	{
		String s = null; //初始化字符串s，赋值为空
		if(str != null) //传入的字符串不能为空
			{
			byte[] a = null; //初始化字节数组，赋值为空
				try 
					{
						a = str.getBytes("GBK"); //将字符串转化为字节数组，GBK码表，此时字节数组的长度为14
					} 
				catch (UnsupportedEncodingException e) //捕捉编码失败异常
					{
						e.printStackTrace();
					}
			System.out.println("String length:"+a.length);//打印字节数组的长度
				if(a.length <= len)
					{
						s = str; //如果要求取出的字节长度大于字节数组应有长度，则将s初始化为str
					}
				else if(len > 0)
					{
						s = new String(a, 0, len); //如果字节长度在字节数组长度范围内，则根据要求取出长度len，创建新的字符串s。
						int length = s.length(); //获取新字符串的长度
					//System.out.println(s.length());
						if(str.charAt(length - 1) != s.charAt(length-1))//如果原字符串中相应位置上的字符与
						//新字符串相应位置上的字符不相等，说明新字符串中相应位置只有半个中文，则应该讲数组指针向左移一位，形成新的子串。
						{
							if(length < 2)
							{
								s = null; //如果新字符串的长度小于2，则将新字符串赋值为空。
							}

							else
							{
								s = s.substring(0, length - 1); //将符合条件的子串复制给s
							}
						}
					}
			}
		System.out.println(s);
	}
}